package leetcode.tree;

/**
 * @author wangmaolin1
 * @date 2023/11/12 21:20
 */
public class _222 {

    /**
     * 完全二叉树 的定义如下：在完全二叉树中，除了最底层节点可能没填满外，其余每层节点数都达到最大值，并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层，则该层包含 1~ 2h 个节点。
     */
    public int countNodes(TreeNode root) {
        if (root == null){
            return  0;
        }
        int l=1;
        TreeNode temL = root;
        while (temL.left!=null){
            temL=temL.left;
            l++;
        }
        int r = 1;
        TreeNode temR = root;
        while (temR.right!=null){
            temR= temR.right;
            r++;
        }
        if (l == r){
            // 满二叉树
            return (int) (Math.pow(2,l) -1);
        }
        return 1 + countNodes(root.left) + countNodes(root.right);
    }

}
